Singleton & Inversion of Control

어떤 컴포넌트를 명시적으로 싱글턴으로 만드는 것은 과도한 종속성을 유발한다.
(싱글톤을 다시 일반 클래스로 만들어서 사용)
혹은, 클래스 생성 소멸 시점을 강제하는 대신 IoC 컨테이너에 간접적으로 위임한다.
(종속성 주입 프레임워크 Boost.DI를 이용해 싱글턴 컴포넌트를 IoC 관례에 맞춤)
auto injector=di::make_injector(di::bind<IFoo>.to<Foo>.in(di::singleton),//
);
di::bind를 통해, IFoo 타입 변수를 멤버로 가지는 컴포넌트가 생성될 때마다 IFoo타입 멤버 변수를
Foo의 실글턴 인스턴스로 초기화

싱글턴 객체를 수정해야 할 때, 코드 한 군데만 수정하면 되며
싱글턴을 직접 구현할 필요 없이 Boost.DI 프레임워크에서 자동으로 처리해 준다.
Boost.DI는 스레드 세이프도 보장함